/**
 * 通用的功能分离
 */
// 一个更加完美的运动框架，支持同时运动，传入json文件
function startMove(obj, attr, iTarget, fn){
    // obj是DOM对象，attr是变化的属性，iTarget是目标属性值，fn是链式的回调函数
    clearInterval(obj.timer);
    obj.timer = setInterval(function(){
        // 1. 获取当前值
        let curStyle = 0;
        if(attr === 'opacity'){
            // 如果是透明度，需要特殊处理，因为单位不同，数字类型不同
            curStyle = Math.round(parseFloat(getStyle(obj,attr))*100);
        } else{
            curStyle = parseInt(getStyle(obj,attr));
        }
        // 2. 计算速度
        let speed = (iTarget-curStyle) / 8;
        speed = speed > 0 ? Math.ceil(speed): Math.floor(speed);
        // 3. 检测停止
        if(curStyle === iTarget){
            clearInterval(obj.timer);
            // 不立刻结束，检查回调函数
            if(fn){
                fn();
            }
        } else{
            if(attr === 'opacity'){
                obj.style.filter = 'opacity('+(curStyle + speed)+')';
                obj.style.opacity = (curStyle + speed)/100
            } else{
                obj.style[attr] = curStyle + speed + 'px';
            }
        }
    }, 30)
}
// 获取样式中的某些属性值
function getStyle(obj, attr){
    if(obj.currentStyle){
        return obj.currentStyle[attr];
    }
    return getComputedStyle(obj,false)[attr];
}
